package com.app.domain.page;

import com.github.pagehelper.PageInfo;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

/**
 * 分页数据封装类
 */
@Data
public class Page<T> implements Serializable {

    @Serial
    private static final long serialVersionUID = -4507855453616027624L;

    /**
     * 当前页码
     */
    private Integer pageNum;

    /**
     * 每页数据量
     */
    private Integer pageSize;

    /**
     * 总页数
     */
    private Integer totalPage;

    /**
     * 总条数
     */
    private Integer total;

    /**
     * 数据集合
     */
    private List<T> list;

    /**
     * 是否是最后一页
     */
    private Boolean last;

    /**
     * 分页
     *
     * @param list 数据集合
     */
    public static <T> Page<T> restPage(List<T> list) {
        Page<T> result = new Page<T>();
        PageInfo<T> pageInfo = new PageInfo<T>(list);
        result.setPageNum(pageInfo.getPageNum());
        result.setPageSize(pageInfo.getPageSize());
        result.setTotal((int) pageInfo.getTotal());
        //使用Math.ceil进行向上取整
        result.setTotalPage((int) Math.ceil((double) pageInfo.getTotal() / pageInfo.getPageSize()));
        result.setList(pageInfo.getList());
        result.setLast(pageInfo.isIsLastPage());
        return result;
    }

    /**
     * 手动指定总条数
     *
     * @param list  数据集合
     * @param total 总条数
     */
    public static <T> Page<T> restPage(List<T> list, Integer total) {
        Page<T> result = new Page<T>();
        PageInfo<T> pageInfo = new PageInfo<T>(list);
        //当前页码
        result.setPageNum(pageInfo.getPageNum());
        //每页数量
        result.setPageSize(pageInfo.getPageSize());
        //数据总量
        result.setTotal(total);
        //数据集合
        result.setList(pageInfo.getList());
        //使用Math.ceil进行向上取整(总页数)
        result.setTotalPage((int) Math.ceil((double) total / pageInfo.getPageSize()));
        //是否最后一页
        result.setLast(result.getTotalPage() == pageInfo.getPageNum());
        return result;
    }

}